/*
在ES6中有序集合数据类型有Array、Map、Set、String、TypedArray、arguments、NodeList
我们需要有一个统一的遍历接口来遍历所有的数据类型
他们都有 [Symbol.Iterator]属性，属性是一个函数，执行函数会返回迭代器
迭代器就有next方法顺序返回子元素
* */

const arr = [1, 2, 3]
const it = arr[Symbol.iterator]()
console.log(it.next())
console.log(it.next())
console.log(it.next())
console.log(it.next())
/*
{value: 1, done: false}
{value: 2, done: false}
{value: 3, done: false}
{value: undefined, done: true}
*/

const str = 'abc'
const it2 = str[Symbol.iterator]()
console.log(it2.next())
console.log(it2.next())
console.log(it2.next())
console.log(it2.next())
/*
{value: "a", done: false}
{value: "b", done: false}
{value: "c", done: false}
{value: undefined, done: true}
*/


// Array[Symbol.iterator] = function () {
//   let index = 0
//   return {
//     next: () => {
//       return index < this.length ?
//         { value: this[index++], done: false } :
//         { done: true }
//     }
//   }
// }
// const arr = [1, 2]
// const it = arr[Symbol.iterator]()
// console.log(it.next())
// console.log(it.next())
// console.log(it.next())

export = {}
